#include <iostream>
#include <stack>
#include <string>

using namespace std;

stack<int> init_stack();

void print_stack(stack<int> int_stack);

int main()
{
    // 声明
    stack<int> int_stack;
    stack<string> string_stack;
    // 初始化
    int_stack = init_stack();
    // 元素入栈，增加元素 O(1)
    int_stack.push(5);
    cout << "int_stack push: ";
    print_stack(int_stack);
    // 移除栈顶元素 O(1)
    int_stack.pop();
    cout << "int_stack pop: ";
    print_stack(int_stack);
    // 取得栈顶元素（但不删除）O(1)
    cout << "int_stack top: " << int_stack.top() << endl;
    // 检测栈内是否为空，空为真 O(1)
    if (int_stack.empty())
    {
        cout << "int_stack is empty" << endl;
    }
    // 返回栈内元素的个数 O(1)
    cout << "int_stack size: " << int_stack.size() << endl;
    return 0;
}

/**
 * 初始化栈
 * @return
 */
stack<int> init_stack()
{
    stack<int> int_stack;
    for (int i = 0; i < 5; i++)
    {
        int_stack.push(i);
    }
    return int_stack;
}

/**
 * 打印栈
 * @param int_stack
 */
void print_stack(stack<int> int_stack)
{
    while (!int_stack.empty())
    {
        cout << int_stack.top() << " ";
        int_stack.pop();
    }
    cout << endl;
}
